Typically, a large software application is highly complex and made up of a large number of interacting functional blocks, also referred to as modules or code blocks. Further, in such a large software application, the functional blocks have a relational hierarchical structure in which some functional blocks perform higher-level tasks whilst depending on lower-level functions for certain tasks.
The performance of such applications is usually monitored in the background and efforts are made towards optimization of the performance. In general, for optimization, the application is profiled and estimation of various performance parameters is often achieved. For example, during the profiling of the application, information regarding execution time, resource consumption, response time, and thread statistics for the application and the functional blocks can be achieved.
Usually, during profiling of applications, the profiling data collected for the application is in relatively large in size. Therefore, generally, while profiling, the profiling data collected is filtered based on the functional blocks for which the profiling is to be done. Conventionally, for filtering profiling data for a heavily nested functional block, a user carrying out the profiling provides an exact hierarchical location or address of the functional block in the application.